<?php
class Shooting extends IController
{
    public function lists()
    {
        $page = IReq::get('page') ? IFilter::act(IReq::get('page'), 'int') : 1;
        $shootingObj = new IQuery('shooting');
        $shootingObj->where = "deleted_at IS NULL";
        $shootingObj->page = $page;
        $shootingObj->order = "created_at DESC";
        $shootingData = $shootingObj->find();
        JSON::jsonSuccess([
            'shootingObj' => $shootingObj->paging,
            'shootingData' => $shootingData
        ]);
    }
    /**
     * 拍摄添加
     */
    public function add()
    {
        if (IReq::getMethod() === 'POST') {
            $reqTime = ITime::getDateTime(); //请求时间

            // 准备入库数据（匹配saas_shooting字段）
            $params_data = [
                'id' => Common::create_uuid(), // 生成36位UUID
                'category' => IFilter::act(IReq::input('category')), // 分类
                'shooting_date' => IFilter::act(IReq::input('shooting_date')), // 拍摄日期
                'shooting_time' => IFilter::act(IReq::input('shooting_time')), // 拍摄时间
                'location' => IFilter::act(IReq::input('location')), // 拍摄地点
                'dish_name' => IFilter::act(IReq::input('dish_name')), // 菜品名称
                'dish_image' => IFilter::act(IReq::input('dish_image')), // 菜品图片URL
                'remark' => IFilter::act(IReq::input('remark')), // 备注
            ];
            // 验证必填参数
            $requiredFields = ['category', 'shooting_date', 'shooting_time', 'location', 'dish_name', 'dish_image']; // 根据实际需求调整必填字段
            $validateResult = $this->validateRequiredFields($params_data, $requiredFields);
            if (!$validateResult['status']) {
                JSON::jsonErr(100002, $validateResult['message']);
            }  
            // 验证日期格式
            if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $params_data['shooting_date'])) {
                JSON::jsonErr(100002, '拍摄日期格式错误');
            }
            // 验证时间格式
            if (!preg_match('/^\d{2}:\d{2}:\d{2}$/', $params_data['shooting_time'])) {
                JSON::jsonErr(100002, '拍摄时间格式错误');
            }
            // 验证地点长度
            if (mb_strlen($params_data['location']) > 255) {
                JSON::jsonErr(100002, '拍摄地点长度不能超过255个字符');
            }
            // 验证菜品名称长度
            if (mb_strlen($params_data['dish_name']) > 50) {
                JSON::jsonErr(100002, '菜品名称长度不能超过50个字符');
            }
            // 验证菜品图片URL格式      
            if (!preg_match('/^https?:\/\/[^\s/$.?#].[^\s]*$/', $params_data['dish_image'])) {
                JSON::jsonErr(100002, '菜品图片URL格式错误');
            }
            // 验证备注长度
            if (mb_strlen($params_data['remark']) > 255) {
                JSON::jsonErr(100002, '备注长度不能超过255个字符');
            }
            // 插入拍摄数据
            try {
                $shootingObj = new IModel('shooting');
                $shootingObj->setData($params_data);
                $shootingObj->add();
                JSON::jsonSuccess();
            } catch (\Exception $e) {
                JSON::jsonErr(100002,'',['return_code'=>$e->getCode(),'return_msg'=>$e->getMessage()]);
            }
        } else {
            JSON::jsonErr(100002, '请求方法错误');
        }
    }
    /**
     * 拍摄删除
     */
    public function delete()
    {
        if (IReq::getMethod() === 'POST') {
            $reqTime = ITime::getDateTime(); //请求时间
            // 准备入库数据（匹配saas_shooting字段）
            $params_data = [
                'id' => IFilter::act(IReq::input('id')), // 主键UUID
            ];
            // 验证必填参数
            $requiredFields = ['id']; // 根据实际需求调整必填字段
            $validateResult = $this->validateRequiredFields($params_data, $requiredFields);
            if (!$validateResult['status']) {
                JSON::jsonErr(100002, $validateResult['message']);
            }
            // 软删除拍摄数据
            try {
                $shootingObj = new IModel('shooting');
                $shootingObj->setData(['id' => $params_data['id'], 'deleted_at' => $reqTime]);
                $shootingObj->update("id='".$params_data['id']."'");
                JSON::jsonSuccess();
            } catch (\Exception $e) {
                JSON::jsonErr(100002,'',['return_code'=>$e->getCode(),'return_msg'=>$e->getMessage()]);
            }   
        }
    }
    /**
     * 拍摄更新
     */
    public function update()
    {
        if (IReq::getMethod() === 'POST') {
            $reqTime = ITime::getDateTime(); //请求时间
            // 准备入库数据（匹配saas_shooting字段）
            $params_data = [
                'id' => IFilter::act(IReq::input('id')), // 主键UUID
                'category' => IFilter::act(IReq::input('category')), // 分类
                'shooting_date' => IFilter::act(IReq::input('shooting_date')), // 拍摄日期
                'shooting_time' => IFilter::act(IReq::input('shooting_time')), // 拍摄时间
                'location' => IFilter::act(IReq::input('location')), // 拍摄地点
                'dish_name' => IFilter::act(IReq::input('dish_name')), // 菜品名称
                'dish_image' => IFilter::act(IReq::input('dish_image')), // 菜品图片URL
                'remark' => IFilter::act(IReq::input('remark')), // 备注
            ];
            // 验证必填参数
            $requiredFields = ['id', 'category', 'shooting_date', 'shooting_time', 'location', 'dish_name', 'dish_image']; // 根据实际需求调整必填字段
            $validateResult = $this->validateRequiredFields($params_data, $requiredFields);
            if (!$validateResult['status']) {
                JSON::jsonErr(100002, $validateResult['message']);
            }  
            // 验证日期格式
            if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $params_data['shooting_date'])) {
                JSON::jsonErr(100002, '拍摄日期格式错误');
            }
            // 验证时间格式
            if (!preg_match('/^\d{2}:\d{2}:\d{2}$/', $params_data['shooting_time'])) {
                JSON::jsonErr(100002, '拍摄时间格式错误');
            }
            // 验证地点长度
            if (mb_strlen($params_data['location']) > 255) {
                JSON::jsonErr(100002, '拍摄地点长度不能超过255个字符');
            }
            // 验证菜品名称长度
            if (mb_strlen($params_data['dish_name']) > 50) {
                JSON::jsonErr(100002, '菜品名称长度不能超过50个字符');
            }
            // 验证菜品图片URL格式      
            if (!preg_match('/^https?:\/\/[^\s/$.?#].[^\s]*$/', $params_data['dish_image'])) {
                JSON::jsonErr(100002, '菜品图片URL格式错误');
            }
            // 验证备注长度
            if (mb_strlen($params_data['remark']) > 255) {
                JSON::jsonErr(100002, '备注长度不能超过255个字符');
            }
            // 更新拍摄数据
            try {
                $shootingObj = new IModel('shooting');
                $shootingObj->setData($params_data);
                $shootingObj->update("id='".$params_data['id']."'");
                JSON::jsonSuccess();
            } catch (\Exception $e) {
                JSON::jsonErr(100002,'',['return_code'=>$e->getCode(),'return_msg'=>$e->getMessage()]);
            }
        }
    }
    

}